function solver = definesolvers

% ****************************
% Create a default solver
% ****************************
emptysolver.tag     = '';
emptysolver.version = '';    % Developer/from module
emptysolver.subversion = ''; % Typically the release number
emptysolver.checkfor = {''};
emptysolver.versionnumbercreator = []; % A function returning e.g. x.y.z
emptysolver.requiredversionnumber= [];
emptysolver.detector= [];
emptysolver.call    = '';
emptysolver.subcall = '';
emptysolver.show    = 1;
emptysolver.usesother = 0;
emptysolver.builtin = 0;
emptysolver.supportsinitial = 0;
emptysolver.supportsinitialNAN = 0;
emptysolver.supportshighprec = 0;

emptysolver.objective.linear = 0;
emptysolver.objective.quadratic.convex = 0;
emptysolver.objective.quadratic.nonconvex = 0;
emptysolver.objective.quadratic.nonnegative = 0;
emptysolver.objective.polynomial = 0;
emptysolver.objective.maxdet.convex = 0;
emptysolver.objective.maxdet.nonconvex = 0;
emptysolver.objective.signomial = 0;

emptysolver.constraint.equalities.linear     = 0;
emptysolver.constraint.equalities.quadratic  = 0;
emptysolver.constraint.equalities.polynomial = 0;
emptysolver.constraint.equalities.signomial  = 0;
emptysolver.constraint.equalities.multiterm  = 1;

emptysolver.constraint.inequalities.elementwise.linear = 0;
emptysolver.constraint.inequalities.elementwise.quadratic.convex = 0;
emptysolver.constraint.inequalities.elementwise.quadratic.nonconvex = 0;
emptysolver.constraint.inequalities.elementwise.quadratic.nonegative = 0;
emptysolver.constraint.inequalities.elementwise.polynomial = 0;
emptysolver.constraint.inequalities.elementwise.signomial = 0;

emptysolver.constraint.inequalities.semidefinite.linear = 0;
emptysolver.constraint.inequalities.semidefinite.quadratic = 0;
emptysolver.constraint.inequalities.semidefinite.polynomial = 0;
emptysolver.constraint.inequalities.semidefinite.signomial = 0;
emptysolver.constraint.inequalities.rank = 0;

emptysolver.constraint.inequalities.secondordercone.linear = 0;
emptysolver.constraint.inequalities.secondordercone.nonlinear = 0;
emptysolver.constraint.inequalities.rotatedsecondordercone.linear = 0;
emptysolver.constraint.inequalities.rotatedsecondordercone.nonlinear = 0;

emptysolver.constraint.complementarity.variable  = 0;
emptysolver.constraint.complementarity.linear  = 0;
emptysolver.constraint.complementarity.nonlinear  = 0;

emptysolver.constraint.integer = 0;
emptysolver.constraint.binary = 0;
emptysolver.constraint.semivar = 0;
emptysolver.constraint.semiintvar = 0;
emptysolver.constraint.sos1 = 0;
emptysolver.constraint.sos2 = 0;

emptysolver.dual       = 0;
emptysolver.complex    = 0;
emptysolver.interval   = 0;
emptysolver.parametric = 0;
emptysolver.evaluation = 0;
emptysolver.exponentialcone = 0;
emptysolver.powercone = 0;

emptysolver.uncertain  = 0;
emptysolver.global = 0;

MATLAB_lexversion = version('-release');
MATLAB_lexversion = MATLAB_lexversion(1:5); %Prune possible hotfix?
MATLAB_lexversion = strrep(strrep(MATLAB_lexversion,'a','.1'),'b','.2');

% **************************************
% Some standard solvers to simplify code
% **************************************

% LP solver
lpsolver = emptysolver;
lpsolver.objective.linear = 1;
lpsolver.constraint.equalities.linear = 1;
lpsolver.constraint.inequalities.elementwise.linear = 1;
lpsolver.dual = 1;
lpsolver.global = 1;

% QP solver
qpsolver = emptysolver;
qpsolver.objective.linear = 1;
qpsolver.objective.quadratic.convex = 1;
qpsolver.constraint.equalities.linear = 1;
qpsolver.constraint.inequalities.elementwise.linear = 1;
qpsolver.dual = 1;
qpsolver.global = 1;

% SDP solver
sdpsolver = emptysolver;
sdpsolver.objective.linear = 1;
sdpsolver.constraint.equalities.linear = 1;
sdpsolver.constraint.inequalities.elementwise.linear = 1;
sdpsolver.constraint.inequalities.semidefinite.linear = 1;
sdpsolver.dual = 1;
sdpsolver.global = 1;

% ****************************
% INITIALIZE COUNTER
% ****************************
i = 1;

% ****************************
% DEFINE SOLVERS
% ****************************

solver(i) = qpsolver;
solver(i).tag     = 'GUROBI';
solver(i).version = '';
solver(i).checkfor= {'gurobi'};
solver(i).call    = 'callgurobi';
solver(i).constraint.inequalities.elementwise.quadratic.convex = 1;
solver(i).constraint.inequalities.secondordercone.linear = 1;
solver(i).constraint.integer = 1;
solver(i).constraint.binary = 1;
solver(i).constraint.semivar = 1;
solver(i).constraint.sos2 = 1;
solver(i).supportsinitial = 1;
solver(i).supportsinitialNAN = 1;
i = i+1;

solver(i) = qpsolver;
solver(i).tag     = 'GUROBI';
solver(i).version = 'NONCONVEX';
solver(i).checkfor= {'gurobi'};
solver(i).call    = 'callgurobi';
solver(i).objective.quadratic.nonconvex = 1;
solver(i).objective.signomial = 1;
solver(i).constraint.inequalities.elementwise.quadratic.convex = 1;
solver(i).constraint.inequalities.elementwise.quadratic.nonconvex = 1;
solver(i).constraint.inequalities.signomial  = 1;
solver(i).constraint.equalities.quadratic = 1;
solver(i).constraint.equalities.signomial  = 1;
solver(i).constraint.inequalities.secondordercone.linear = 1;
solver(i).constraint.integer = 1;
solver(i).constraint.binary = 1;
solver(i).constraint.semivar = 1;
solver(i).constraint.sos2 = 1;
solver(i).supportsinitial = 1;
solver(i).supportsinitialNAN = 1;
i = i+1;

% The general nonlinear Gugobi definition is placed below fmincon

solver(i) = qpsolver;
solver(i).tag     = 'CPLEX';
solver(i).version = 'IBM';
solver(i).subversion = '12.10.0';
solver(i).checkfor= {'cplexqcp.m','cplexlink12100'};
solver(i).call    = 'call_cplexibm_qcmiqp';
solver(i).objective.quadratic.convex = 1;
solver(i).constraint.inequalities.elementwise.quadratic.convex = 1;
solver(i).constraint.inequalities.secondordercone.linear = 1;
solver(i).constraint.integer = 1;
solver(i).constraint.binary = 1;
solver(i).constraint.sos2 = 1;
solver(i).constraint.semivar = 1;
solver(i).constraint.semiintvar = 1;
solver(i).supportsinitial = 1;
i = i+1;

solver(i) = qpsolver;
solver(i).tag     = 'CPLEX';
solver(i).version = 'IBM';
solver(i).subversion = '12.10.0';
solver(i).checkfor= {'cplexqcp.m','cplexlink12100'};
solver(i).call    = 'call_cplexibm_qcmiqp';
solver(i).objective.quadratic.nonconvex = 1;
solver(i).constraint.integer = 1;
solver(i).constraint.binary = 1;
solver(i).constraint.sos2 = 1;
solver(i).constraint.semivar = 1;
solver(i).constraint.semiintvar = 1;
solver(i).supportsinitial = 1;
i = i+1;

solver(i) = qpsolver;
solver(i).tag     = 'CPLEX';
solver(i).version = 'IBM';
solver(i).subversion = '12.9.0';
solver(i).checkfor= {'cplexqcp.m','cplexlink1290'};
solver(i).call    = 'call_cplexibm_qcmiqp';
solver(i).objective.quadratic.convex = 1;
solver(i).constraint.inequalities.elementwise.quadratic.convex = 1;
solver(i).constraint.inequalities.secondordercone.linear = 1;
solver(i).constraint.integer = 1;
solver(i).constraint.binary = 1;
solver(i).constraint.sos2 = 1;
solver(i).constraint.semivar = 1;
solver(i).constraint.semiintvar = 1;
solver(i).supportsinitial = 1;
i = i+1;

solver(i) = qpsolver;
solver(i).tag     = 'CPLEX';
solver(i).version = 'IBM';
solver(i).subversion = '12.9.0';
solver(i).checkfor= {'cplexqcp.m','cplexlink1290'};
solver(i).call    = 'call_cplexibm_qcmiqp';
solver(i).objective.quadratic.nonconvex = 1;
solver(i).constraint.integer = 1;
solver(i).constraint.binary = 1;
solver(i).constraint.sos2 = 1;
solver(i).constraint.semivar = 1;
solver(i).constraint.semiintvar = 1;
solver(i).supportsinitial = 1;
i = i+1;

solver(i) = qpsolver;
solver(i).tag     = 'CPLEX';
solver(i).version = 'IBM';
solver(i).subversion = '12.8.0';
solver(i).checkfor= {'cplexqcp.m','cplexlink1280'};
solver(i).call    = 'call_cplexibm_qcmiqp';
solver(i).objective.quadratic.convex = 1;
solver(i).constraint.inequalities.elementwise.quadratic.convex = 1;
solver(i).constraint.inequalities.secondordercone.linear = 1;
solver(i).constraint.integer = 1;
solver(i).constraint.binary = 1;
solver(i).constraint.sos2 = 1;
solver(i).constraint.semivar = 1;
solver(i).constraint.semiintvar = 1;
solver(i).supportsinitial = 1;
i = i+1;

solver(i) = qpsolver;
solver(i).tag     = 'CPLEX';
solver(i).version = 'IBM';
solver(i).subversion = '12.8.0';
solver(i).checkfor= {'cplexqcp.m','cplexlink1280'};
solver(i).call    = 'call_cplexibm_qcmiqp';
solver(i).objective.quadratic.nonconvex = 1;
solver(i).constraint.integer = 1;
solver(i).constraint.binary = 1;
solver(i).constraint.sos2 = 1;
solver(i).constraint.semivar = 1;
solver(i).constraint.semiintvar = 1;
solver(i).supportsinitial = 1;
i = i+1;

solver(i) = qpsolver;
solver(i).tag     = 'CPLEX';
solver(i).version = 'IBM';
solver(i).subversion = '12.7.1';
solver(i).checkfor= {'cplexqcp.m','cplexlink1271'};
solver(i).call    = 'call_cplexibm_qcmiqp';
solver(i).objective.quadratic.nonconvex = 1;
solver(i).constraint.integer = 1;
solver(i).constraint.binary = 1;
solver(i).constraint.sos2 = 1;
solver(i).constraint.semivar = 1;
solver(i).constraint.semiintvar = 1;
solver(i).supportsinitial = 1;
i = i+1;

solver(i) = qpsolver;
solver(i).tag     = 'CPLEX';
solver(i).version = 'IBM';
solver(i).subversion = '12.7.1';
solver(i).checkfor= {'cplexqcp.m','cplexlink1271'};
solver(i).call    = 'call_cplexibm_qcmiqp';
solver(i).objective.quadratic.convex = 1;
solver(i).constraint.inequalities.elementwise.quadratic.convex = 1;
solver(i).constraint.inequalities.secondordercone.linear = 1;
solver(i).constraint.integer = 1;
solver(i).constraint.binary = 1;
solver(i).constraint.sos2 = 1;
solver(i).constraint.semivar = 1;
solver(i).constraint.semiintvar = 1;
solver(i).supportsinitial = 1;
i = i+1;

solver(i) = qpsolver;
solver(i).tag     = 'CPLEX';
solver(i).version = 'IBM';
solver(i).subversion = '12.7.0';
solver(i).checkfor= {'cplexqcp.m','cplexlink1270'};
solver(i).call    = 'call_cplexibm_qcmiqp';
solver(i).objective.quadratic.nonconvex = 1;
solver(i).constraint.integer = 1;
solver(i).constraint.binary = 1;
solver(i).constraint.sos2 = 1;
solver(i).constraint.semivar = 1;
solver(i).constraint.semiintvar = 1;
solver(i).supportsinitial = 1;
i = i+1;

solver(i) = qpsolver;
solver(i).tag     = 'CPLEX';
solver(i).version = 'IBM';
solver(i).subversion = '12.7.0';
solver(i).checkfor= {'cplexqcp.m','cplexlink1270'};
solver(i).call    = 'call_cplexibm_qcmiqp';
solver(i).objective.quadratic.convex = 1;
solver(i).constraint.inequalities.elementwise.quadratic.convex = 1;
solver(i).constraint.inequalities.secondordercone.linear = 1;
solver(i).constraint.integer = 1;
solver(i).constraint.binary = 1;
solver(i).constraint.sos2 = 1;
solver(i).constraint.semivar = 1;
solver(i).constraint.semiintvar = 1;
solver(i).supportsinitial = 1;
i = i+1;


solver(i) = qpsolver;
solver(i).tag     = 'CPLEX';
solver(i).version = 'IBM';
solver(i).subversion = '12.6.3';
solver(i).checkfor= {'cplexqcp.m','cplexlink1263'};
solver(i).call    = 'call_cplexibm_qcmiqp';
solver(i).objective.quadratic.nonconvex = 1;
solver(i).constraint.integer = 1;
solver(i).constraint.binary = 1;
solver(i).constraint.sos2 = 1;
solver(i).constraint.semivar = 1;
solver(i).constraint.semiintvar = 1;
solver(i).supportsinitial = 1;
i = i+1;

solver(i) = qpsolver;
solver(i).tag     = 'CPLEX';
solver(i).version = 'IBM';
solver(i).subversion = '12.6.3';
solver(i).checkfor= {'cplexqcp.m','cplexlink1263'};
solver(i).call    = 'call_cplexibm_qcmiqp';
solver(i).objective.quadratic.convex = 1;
solver(i).constraint.inequalities.elementwise.quadratic.convex = 1;
solver(i).constraint.inequalities.secondordercone.linear = 1;
solver(i).constraint.integer = 1;
solver(i).constraint.binary = 1;
solver(i).constraint.sos2 = 1;
solver(i).constraint.semivar = 1;
solver(i).constraint.semiintvar = 1;
solver(i).supportsinitial = 1;
i = i+1;

solver(i) = qpsolver;
solver(i).tag     = 'CPLEX';
solver(i).version = 'IBM';
solver(i).subversion = '12.6.2';
solver(i).checkfor= {'cplexqcp.m','cplexlink1262'};
solver(i).call    = 'call_cplexibm_qcmiqp';
solver(i).objective.quadratic.nonconvex = 1;
solver(i).constraint.integer = 1;
solver(i).constraint.binary = 1;
solver(i).constraint.sos2 = 1;
solver(i).constraint.semivar = 1;
solver(i).constraint.semiintvar = 1;
solver(i).supportsinitial = 1;
i = i+1;

solver(i) = qpsolver;
solver(i).tag     = 'CPLEX';
solver(i).version = 'IBM';
solver(i).subversion = '12.6.2';
solver(i).checkfor= {'cplexqcp.m','cplexlink1262'};
solver(i).call    = 'call_cplexibm_qcmiqp';
solver(i).objective.quadratic.convex = 1;
solver(i).constraint.inequalities.elementwise.quadratic.convex = 1;
solver(i).constraint.inequalities.secondordercone.linear = 1;
solver(i).constraint.integer = 1;
solver(i).constraint.binary = 1;
solver(i).constraint.sos2 = 1;
solver(i).constraint.semivar = 1;
solver(i).constraint.semiintvar = 1;
solver(i).supportsinitial = 1;
i = i+1;


solver(i) = qpsolver;
solver(i).tag     = 'CPLEX';
solver(i).version = 'IBM';
solver(i).subversion = '12.6.1';
solver(i).checkfor= {'cplexqcp.m','cplexlink1261'};
solver(i).call    = 'call_cplexibm_qcmiqp';
solver(i).objective.quadratic.nonconvex = 1;
solver(i).constraint.integer = 1;
solver(i).constraint.binary = 1;
solver(i).constraint.sos2 = 1;
solver(i).constraint.semivar = 1;
solver(i).constraint.semiintvar = 1;
solver(i).supportsinitial = 1;
i = i+1;

solver(i) = qpsolver;
solver(i).tag     = 'CPLEX';
solver(i).version = 'IBM';
solver(i).subversion = '12.6.1';
solver(i).checkfor= {'cplexqcp.m','cplexlink1261'};
solver(i).call    = 'call_cplexibm_qcmiqp';
solver(i).objective.quadratic.convex = 1;
solver(i).constraint.inequalities.elementwise.quadratic.convex = 1;
solver(i).constraint.inequalities.secondordercone.linear = 1;
solver(i).constraint.integer = 1;
solver(i).constraint.binary = 1;
solver(i).constraint.sos2 = 1;
solver(i).constraint.semivar = 1;
solver(i).constraint.semiintvar = 1;
solver(i).supportsinitial = 1;
i = i+1;

solver(i) = qpsolver;
solver(i).tag     = 'CPLEX';
solver(i).version = 'IBM';
solver(i).subversion = '12.6.0';
solver(i).checkfor= {'cplexqcp.m','cplexlink1260'};
solver(i).call    = 'call_cplexibm_qcmiqp';
solver(i).objective.quadratic.nonconvex = 1;
solver(i).constraint.integer = 1;
solver(i).constraint.binary = 1;
solver(i).constraint.sos2 = 1;
solver(i).constraint.semivar = 1;
solver(i).constraint.semiintvar = 1;
solver(i).supportsinitial = 1;
i = i+1;

solver(i) = qpsolver;
solver(i).tag     = 'CPLEX';
solver(i).version = 'IBM';
solver(i).subversion = '12.6.0';
solver(i).checkfor= {'cplexqcp.m','cplexlink1260'};
solver(i).call    = 'call_cplexibm_qcmiqp';
solver(i).objective.quadratic.convex = 1;
solver(i).constraint.inequalities.elementwise.quadratic.convex = 1;
solver(i).constraint.inequalities.secondordercone.linear = 1;
solver(i).constraint.integer = 1;
solver(i).constraint.binary = 1;
solver(i).constraint.sos2 = 1;
solver(i).constraint.semivar = 1;
solver(i).constraint.semiintvar = 1;
solver(i).supportsinitial = 1;
i = i+1;

solver(i) = qpsolver;
solver(i).tag     = 'CPLEX';
solver(i).version = 'IBM';
solver(i).subversion = '12.5.1';
solver(i).checkfor= {'cplexqcp.m','cplexlink1251'};
solver(i).call    = 'call_cplexibm_qcmiqp';
solver(i).constraint.inequalities.elementwise.quadratic.convex = 1;
solver(i).constraint.inequalities.secondordercone.linear = 1;
solver(i).constraint.integer = 1;
solver(i).constraint.binary = 1;
solver(i).constraint.sos2 = 1;
solver(i).constraint.semivar = 1;
solver(i).constraint.semiintvar = 1;
solver(i).supportsinitial = 1;
i = i+1;

solver(i) = qpsolver;
solver(i).tag     = 'CPLEX';
solver(i).version = 'IBM';
solver(i).subversion = '12.5';
solver(i).checkfor= {'cplexqcp.m','cplexlink125'};
solver(i).call    = 'call_cplexibm_qcmiqp';
solver(i).constraint.inequalities.elementwise.quadratic.convex = 1;
solver(i).constraint.inequalities.secondordercone.linear = 1;
solver(i).constraint.integer = 1;
solver(i).constraint.binary = 1;
solver(i).constraint.sos2 = 1;
solver(i).constraint.semivar = 1;
solver(i).constraint.semiintvar = 1;
solver(i).supportsinitial = 1;
i = i+1;

solver(i) = qpsolver;
solver(i).tag     = 'CPLEX';
solver(i).version = 'IBM';
solver(i).subversion = '12.4';
solver(i).checkfor= {'cplexqcp.m','cplexlink124'};
solver(i).call    = 'call_cplexibm_qcmiqp';
solver(i).constraint.inequalities.elementwise.quadratic.convex = 1;
solver(i).constraint.inequalities.secondordercone.linear = 1;
solver(i).constraint.integer = 1;
solver(i).constraint.binary = 1;
solver(i).constraint.sos2 = 1;
solver(i).constraint.semivar = 1;
solver(i).constraint.semiintvar = 1;
solver(i).supportsinitial = 1;
i = i+1;

solver(i) = lpsolver;
solver(i).tag     = 'CLP';
solver(i).version = 'CLPMEX-LP';
solver(i).checkfor= {'mexclp'};
solver(i).call    = 'callclp';
i = i+1;

solver(i) = qpsolver;
solver(i).tag     = 'XPRESS';
solver(i).version = 'FICO';
solver(i).checkfor= {'xprsmiqcqp.m'};
solver(i).call    = 'call_xpressfico_qcmip';
solver(i).constraint.inequalities.elementwise.quadratic.convex = 1;
solver(i).constraint.inequalities.secondordercone.linear = 1;
solver(i).constraint.integer = 1;
solver(i).constraint.binary = 1;
solver(i).constraint.sos2 = 1;
solver(i).constraint.semivar = 1;
solver(i).constraint.semiintvar = 1;
i = i+1;

solver(i) = qpsolver;
solver(i).tag     = 'MOSEK';
solver(i).version = 'LP/QP';
solver(i).checkfor= {'mosekopt'};
solver(i).call    = 'callmosek';
i = i+1;

solver(i) = qpsolver;
solver(i).tag     = 'MOSEK';
solver(i).version = 'LP/QP-INTEGER';
solver(i).checkfor= {'mosekopt'};
solver(i).call    = 'callmosek';
solver(i).constraint.binary = 1;
solver(i).constraint.integer = 1;
solver(i).supportsinitial = 1;
solver(i).supportsinitialNAN = 1;
i = i+1;

solver(i) = lpsolver;
solver(i).tag     = 'MOSEK';
solver(i).version = 'CONE';
solver(i).checkfor= {'mosekopt'};
solver(i).call    = 'callmosek';
solver(i).constraint.inequalities.secondordercone.linear = 1;
solver(i).exponentialcone = 1;
solver(i).powercone = 1;
i = i+1;

solver(i) = lpsolver;
solver(i).tag     = 'MOSEK';
solver(i).version = 'CONE-INTEGER';
solver(i).checkfor= {'mosekopt'};
solver(i).call    = 'callmosek';
solver(i).constraint.binary = 1;
solver(i).constraint.integer = 1;
solver(i).constraint.inequalities.secondordercone.linear = 1;
solver(i).exponentialcone = 1;
solver(i).powercone = 1;
solver(i).supportsinitial = 1;
solver(i).supportsinitialNAN = 1;
i = i+1;

solver(i) = sdpsolver;
solver(i).tag     = 'MOSEK';
solver(i).version = 'SDP';
solver(i).checkfor= {'mosekopt'};
solver(i).call    = 'callmosek';
solver(i).constraint.inequalities.secondordercone.linear = 1;
solver(i).exponentialcone = 1;
solver(i).powercone = 1;
i = i+1;

solver(i) = lpsolver;
solver(i).tag     = 'MOSEK';
solver(i).version = 'GEOMETRIC';
solver(i).checkfor= {'mosekopt'};
solver(i).call    = 'callmosek';
solver(i).objective.signomial = 1;
solver(i).objective.quadratic.nonnegative = 1;
solver(i).constraint.inequalities.elementwise.signomial = 1;
solver(i).constraint.equalities.linear = 1;
solver(i).constraint.equalities.quadratic = 1;
solver(i).constraint.equalities.polynomial = 1;
solver(i).constraint.equalities.signomial = 1;
solver(i).constraint.equalities.multiterm  = 0;
i = i+1;

solver(i) = qpsolver;
solver(i).tag     = 'COPT';
solver(i).version = 'COPTMEX';
solver(i).checkfor= {'copt_solve'};
solver(i).call    = 'callcopt';
solver(i).constraint.inequalities.secondordercone.linear = 1;
solver(i).exponentialcone = 1;
solver(i).constraint.integer = 1;
solver(i).constraint.binary = 1;
solver(i).constraint.semivar = 1;
solver(i).constraint.sos2 = 1;
solver(i).supportsinitial = 1;
solver(i).supportsinitialNAN = 1;
i = i+1;

solver(i) = sdpsolver;
solver(i).tag = 'COPT';
solver(i).version = 'COPTMEX';
solver(i).checkfor = {'copt_solve'};
solver(i).constraint.inequalities.secondordercone.linear = 1;
solver(i).exponentialcone = 1;
solver(i).call = 'callcopt';
i = i + 1;

solver(i) = lpsolver;
solver(i).tag     = 'SCIP';
solver(i).version = 'linear';
solver(i).checkfor= {'scip'};
solver(i).call    = 'callscipmex';
solver(i).constraint.integer = 1;
solver(i).constraint.binary = 1;
solver(i).constraint.sos2 = 1;
i = i+1;

solver(i) = lpsolver;
solver(i).tag     = 'LINPROG';
solver(i).version = MATLAB_lexversion;
solver(i).checkfor= {'linprog'};
solver(i).call    = 'calllinprog';
i = i+1;

solver(i) = qpsolver;
solver(i).tag     = 'QUADPROG';
solver(i).version =  MATLAB_lexversion;
solver(i).checkfor= {'quadprog'};
solver(i).call    = 'callquadprog';
solver(i).supportsinitial = 1;
i = i+1;

solver(i) = lpsolver;
solver(i).tag     = 'GLPK';
solver(i).version = 'GLPKMEX-CC';
solver(i).checkfor= {'glpkcc'};
solver(i).call    = 'callglpkcc';
solver(i).constraint.integer = 1;
solver(i).constraint.binary = 1;
i = i+1;

if ~exist('OCTAVE_VERSION','builtin')
solver(i) = lpsolver;
solver(i).tag     = 'GLPK';
solver(i).version = 'GLPKMEX';
solver(i).checkfor= {'glpk'};
solver(i).call    = 'callglpk';
solver(i).constraint.integer = 1;
solver(i).constraint.binary = 1;
i = i+1;
end

% Needed for Later Octave version (glpkmex is depracated)
solver(i) = lpsolver;
solver(i).tag     = 'GLPK';
solver(i).version = 'GLPKMEX';
solver(i).checkfor= {'glpk.m'};
solver(i).call    = 'callglpkoctave';
solver(i).constraint.integer = 1;
solver(i).constraint.binary = 1;
i = i+1;

solver(i) = lpsolver;
solver(i).tag     = 'CDD';
solver(i).version = 'CDDMEX';
solver(i).checkfor= {'cddmex'};
solver(i).call    = 'callcdd';
i = i+1;

solver(i) = lpsolver;
solver(i).tag     = 'QSOPT';
solver(i).version = 'OPTI';
solver(i).checkfor= {'opti_qsopt.m'};
solver(i).call    = 'calloptiqsopt';
i = i+1;

solver(i) = lpsolver;
solver(i).tag     = 'QSOPT';
solver(i).version = 'MEXQSOPT';
solver(i).checkfor= {'qsopt.m'};
solver(i).call    = 'callqsopt';
i = i+1;

solver(i) = lpsolver;
solver(i).tag     = 'LPSOLVE';
solver(i).version = 'MXLPSOLVE';
solver(i).checkfor= {'lp_solve', 'opti_lpsolve'};
solver(i).call    = 'calllpsolve';
solver(i).constraint.integer = 1;
solver(i).constraint.sos2 = 1;
i = i+1;

solver(i) = lpsolver;
solver(i).tag     = 'LPSOLVE';
solver(i).version = 'MXLPSOLVE-NATIVE';
solver(i).checkfor= {'mxlpsolve'};
solver(i).call    = 'calllpsolvenative';
solver(i).constraint.integer = 1;
solver(i).constraint.sos2 = 1;
i = i+1;

solver(i) = qpsolver;
solver(i).tag     = 'CLP';
solver(i).version = 'CLPMEX-QP';
solver(i).checkfor= {'mexclp'};
solver(i).call    = 'callclp';
i = i+1;

solver(i) = qpsolver;
solver(i).tag     = 'CLP';
solver(i).version = 'OPTI';
solver(i).checkfor= {'clp','opti_clp'};
solver(i).call    = 'callopticlp';
i = i+1;

solver(i) = qpsolver;
solver(i).tag     = 'DAQP';
solver(i).version = '';
solver(i).checkfor= {'daqp'};
solver(i).call    = 'calldaqp';
solver(i).constraint.binary = 1;
i = i+1;

solver(i) = qpsolver;
solver(i).tag     = 'PIQP';
solver(i).version = '';
solver(i).checkfor= {'piqp'};
solver(i).call    = 'callpiqp';
i = i+1;

solver(i) = qpsolver;
solver(i).tag     = 'qpOASES';
solver(i).version = '';
solver(i).checkfor= {'qpOASES'};
solver(i).call    = 'callqpoases';
i = i+1;

solver(i) = qpsolver;
solver(i).tag     = 'OSQP';
solver(i).version = '';
solver(i).checkfor= {'OSQP'};
solver(i).call    = 'callosqp';
i = i+1;

solver(i) = lpsolver;
solver(i).tag     = 'CBC';
solver(i).version = '';
solver(i).checkfor= {'cbc','opti_cbc'};
solver(i).call    = 'callcbc';
solver(i).constraint.integer = 1;
solver(i).constraint.sos2 = 0;
i = i+1;

solver(i) = qpsolver;
solver(i).tag     = 'QPIP';
solver(i).version = '';
solver(i).checkfor= {'qpip'};
solver(i).call    = 'callqpip';
i = i+1;

solver(i) = qpsolver;
solver(i).tag     = 'QPAS';
solver(i).version = '';
solver(i).checkfor= {'qpas'};
solver(i).call    = 'callqpas';
i = i+1;

solver(i) = qpsolver;
solver(i).tag     = 'QPIP';
solver(i).version = 'NONCONVEX';
solver(i).checkfor= {'qpip'};
solver(i).call    = 'callqpip';
solver(i).objective.quadratic.nonconvex = 1;
solver(i).global = 0;
i = i+1;

solver(i) = qpsolver;
solver(i).tag     = 'QPAS';
solver(i).version = 'NONCONVEX';
solver(i).checkfor= {'qpas'};
solver(i).call    = 'callqpas';
solver(i).objective.quadratic.nonconvex = 1;
solver(i).global = 0;
i = i+1;

solver(i) = qpsolver;
solver(i).tag     = 'ecos';
solver(i).version = '';
solver(i).checkfor= {'ecos'};
solver(i).call    = 'callecos';
solver(i).objective.quadratic.convex = 0;
solver(i).constraint.inequalities.secondordercone.linear = 1;
solver(i).constraint.binary = 1;
solver(i).constraint.integer = 1;
solver(i).exponentialcone = 1;
i = i+1;

solver(i) = sdpsolver;
solver(i).tag     = 'SeDuMi';
solver(i).subversion = '';
solver(i).checkfor= {'sedumi_version'};
solver(i).versionnumbercreator = @()sedumi_version; 
solver(i).requiredversionnumber= '1.3.6';
solver(i).call    = 'callsedumi';
solver(i).constraint.equalities.linear = 1;
solver(i).constraint.inequalities.secondordercone.linear = 1;
solver(i).constraint.inequalities.rotatedsecondordercone.linear = 0;
solver(i).complex = 1;
i = i+1;

solver(i) = sdpsolver;
solver(i).tag     = 'SeDuMi';
solver(i).subversion = '1.3';
solver(i).checkfor= {'sedumi.m','ada_pcg.m','install_sedumi'};
solver(i).call    = 'callsedumi';
solver(i).constraint.equalities.linear = 1;
solver(i).constraint.inequalities.secondordercone.linear = 1;
solver(i).constraint.inequalities.rotatedsecondordercone.linear = 0;
solver(i).complex = 0;
i = i+1;

solver(i) = sdpsolver;
solver(i).tag     = 'SeDuMi';
solver(i).subversion = '1.1';
solver(i).checkfor= {'sedumi.m','ada_pcg.m','qinvsqrt','install_sedumi'};
solver(i).call    = 'callsedumi';
solver(i).constraint.equalities.linear = 1;
solver(i).constraint.inequalities.secondordercone.linear = 1;
solver(i).constraint.inequalities.rotatedsecondordercone.linear = 0;
solver(i).complex = 1;
i = i+1;

solver(i) = sdpsolver;
solver(i).tag     = 'SeDuMi';
solver(i).subversion = '1.05';
solver(i).checkfor= {'sedumi.m','ada_pcg.m','vecreal'};
solver(i).call    = 'callsedumi';
solver(i).constraint.equalities.linear = 1;
solver(i).constraint.inequalities.secondordercone.linear = 1;
solver(i).constraint.inequalities.rotatedsecondordercone.linear = 1;
solver(i).complex = 1;
i = i+1;

solver(i) = sdpsolver;
solver(i).tag     = 'SeDuMi';
solver(i).subversion = '1.03';
solver(i).checkfor= {'sedumi.m','doinfac.m'};
solver(i).call    = 'callsedumi';
solver(i).constraint.equalities.linear = 1;
solver(i).constraint.inequalities.secondordercone.linear = 1;
solver(i).constraint.inequalities.rotatedsecondordercone.linear = 1;
solver(i).complex = 1;
i = i+1;

solver(i) = sdpsolver;
solver(i).tag     = 'SDPT3';
solver(i).subversion = '4';
solver(i).checkfor= {'sqlp','skron','symqmr','blkbarrier'};
solver(i).call    = 'callsdpt34';
solver(i).constraint.equalities.linear = 1;
solver(i).constraint.inequalities.secondordercone.linear = 1;
solver(i).objective.maxdet.convex = 1;
i = i+1;

solver(i) = sdpsolver;
solver(i).tag     = 'SDPNAL';
solver(i).subversion = '0.5';
solver(i).checkfor= {'sdpnalplus'};
solver(i).call    = 'callsdpnal';
solver(i).constraint.equalities.linear = 1;
i = i+1;

solver(i) = sdpsolver;
solver(i).tag     = 'LOGDETPPA';
solver(i).subversion = '0.1';
solver(i).checkfor= {'logdetppa'};
solver(i).call    = 'calllogdetppa';
solver(i).constraint.equalities.linear = 1;
solver(i).constraint.inequalities.secondordercone.linear = 0;
solver(i).objective.maxdet.convex = 1;
i = i+1;

solver(i) = sdpsolver;
solver(i).tag     = 'SparseCoLO';
solver(i).subversion = '0';
solver(i).checkfor= {'sparseCoLO'};
solver(i).call    = 'callsparsecolo';
i = i+1;

solver(i) = sdpsolver;
solver(i).tag     = 'SDPA';
solver(i).version = 'M';
solver(i).checkfor= {'sdpam.m'};
solver(i).call    = 'callsdpa';
solver(i).constraint.equalities.linear = 0;
i = i+1;

solver(i) = sdpsolver;
solver(i).tag     = 'CDCS';
solver(i).version = '';
solver(i).checkfor= {'cdcs'};
solver(i).call    = 'callcdcs';
solver(i).constraint.equalities.linear = 1;
solver(i).constraint.inequalities.secondordercone.linear = 1;
i = i+1;

solver(i) = sdpsolver;
solver(i).tag     = 'DSDP';
solver(i).version = 'OPTI';
solver(i).checkfor= {'dsdp','opti'};
solver(i).call    = 'calloptidsdp';
solver(i).constraint.equalities.linear = 0;
i = i+1;

solver(i) = sdpsolver;
solver(i).tag     = 'DSDP';
solver(i).subversion = '5';
solver(i).checkfor= {'dsdp','dvec'};
solver(i).call    = 'calldsdp5';
solver(i).constraint.equalities.linear = 0;
i = i+1;

solver(i) = sdpsolver;
solver(i).tag     = 'DSDP';
solver(i).subversion = '4';
solver(i).checkfor= {'dsdp'};
solver(i).call    = 'calldsdp';
solver(i).constraint.equalities.linear = 0;
i = i+1;

solver(i) = sdpsolver;
solver(i).tag     = 'SDPLR';
solver(i).version = '';
solver(i).checkfor= {'sdplr'};
solver(i).call    = 'callsdplr';
solver(i).constraint.equalities.linear = 0;
i = i+1;

solver(i) = sdpsolver;
solver(i).tag     = 'CSDP';
solver(i).version = 'opti';
solver(i).checkfor= {'csdp','csdpset'};
solver(i).call    = 'callopticsdp';
solver(i).constraint.equalities.linear = 0;
i = i+1;

solver(i) = sdpsolver;
solver(i).tag     = 'CSDP';
solver(i).version = '';
solver(i).checkfor= {'csdp','readsol','writesdpa'};
solver(i).call    = 'callcsdp';
solver(i).constraint.equalities.linear = 0;
i = i+1;

solver(i) = sdpsolver;
solver(i).tag     = 'MAXDET';
solver(i).version = '';
solver(i).checkfor= {'maxdet.m'};
solver(i).call    = 'callmaxdet';
solver(i).objective.maxdet.convex = 1;
solver(i).constraint.equalities.linear = 0;
solver(i).dual = 0;
i = i+1;

solver(i) = sdpsolver;
solver(i).tag     = 'PENSDP';
solver(i).version = 'PENOPT';
solver(i).checkfor= {'pensdpm'};
solver(i).call    = 'callpensdpm';
solver(i).constraint.equalities.linear = 0;
i = i+1;

solver(i) = sdpsolver;
solver(i).tag     = 'PENSDP';
solver(i).version = 'TOMLAB';
solver(i).checkfor= {'pensdp'};
solver(i).call    = 'callpensdp';
solver(i).constraint.equalities.linear = 0;
i = i+1;

solver(i) = sdpsolver;
solver(i).tag     = 'PENBMI';
solver(i).version = 'PENOPT';
solver(i).checkfor= {'penbmim'};
solver(i).call    = 'callpenbmim';
solver(i).objective.quadratic.convex = 1;
solver(i).objective.quadratic.nonconvex = 1;
solver(i).constraint.equalities.linear = 0;
solver(i).constraint.inequalities.semidefinite.quadratic = 1;
solver(i).constraint.inequalities.semidefinite.polynomial = 1;
solver(i).constraint.inequalities.elementwise.quadratic.convex = 1;
solver(i).constraint.inequalities.elementwise.quadratic.nonconvex = 1;
solver(i).constraint.inequalities.elementwise.polynomial = 1;
solver(i).supportsinitial = 1;
solver(i).global = 0;
i = i+1;

solver(i) = sdpsolver;
solver(i).tag     = 'PENBMI';
solver(i).version = 'TOMLAB';
solver(i).checkfor= {'penbmi'};
solver(i).call    = 'callpenbmi';
solver(i).objective.quadratic.convex = 1;
solver(i).objective.quadratic.nonconvex = 1;
solver(i).constraint.equalities.linear = 0;
solver(i).constraint.inequalities.semidefinite.quadratic = 1;
solver(i).constraint.inequalities.elementwise.quadratic.convex = 1;
solver(i).constraint.inequalities.elementwise.quadratic.nonconvex = 1;
solver(i).supportsinitial = 1;
solver(i).global = 0;
i = i+1;

solver(i) = lpsolver;
solver(i).tag     = 'CONEPROG';
solver(i).version = '';
solver(i).checkfor= {'coneprog'};
solver(i).call    = 'callconeprog';
solver(i).constraint.inequalities.secondordercone.linear = 1;
i = i+1;

solver(i) = sdpsolver;
solver(i).tag     = 'LMILAB';
solver(i).version = '';
solver(i).checkfor= {'setlmis'};
solver(i).call    = 'calllmilab';
solver(i).dual = 0;
solver(i).constraint.equalities.linear = 0;
i = i+1;

solver(i) = sdpsolver;
solver(i).tag     = 'SDPNAL';
solver(i).version = '';
solver(i).checkfor= {'sdpnal'};
solver(i).call    = 'callsdpnal';
i = i+1;

solver(i) = sdpsolver;
solver(i).tag     = 'LMIRANK';
solver(i).version = '';
solver(i).checkfor= {'lmirank'};
solver(i).call    = 'calllmirank';
solver(i).dual = 0;
solver(i).constraint.inequalities.rank = 1;
solver(i).objective.linear = 0;
solver(i).constraint.equalities.linear = 0;
solver(i).supportsinitial = 1;
i = i+1;

solver(i) = sdpsolver;
solver(i).tag     = 'VSDP';
solver(i).subversion = '0.1';
solver(i).checkfor= {'vsdpup','vsdpup_yalmip'};
solver(i).call    = 'callvsdp';
solver(i).constraint.equalities.linear = 0;
solver(i).constraint.inequalities.secondordercone.linear = 0;
solver(i).interval = 1;
solver(i).usesother = 1;
i = i+1;

solver(i) = emptysolver;
solver(i).tag     = 'MPT';
solver(i).subversion = '3';
solver(i).checkfor= {'mpt_mpqp','mpt_plcp'};
solver(i).call    = 'callmpt3';
solver(i).objective.linear = 1;
solver(i).objective.quadratic.convex = 1;
solver(i).objective.quadratic.nonconvex = 1;
solver(i).constraint.inequalities.elementwise.linear = 1;
solver(i).constraint.equalities.linear = 1;
solver(i).parametric = 1;
solver(i).constraint.binary = 1;
i = i+1;

solver(i) = emptysolver;
solver(i).tag     = 'MPT';
solver(i).subversion = '2';
solver(i).checkfor= {'mpt_getInput'};
solver(i).call    = 'callmpt';
solver(i).objective.linear = 1;
solver(i).objective.quadratic.convex = 1;
solver(i).objective.quadratic.nonconvex = 1;
solver(i).constraint.inequalities.elementwise.linear = 1;
solver(i).constraint.equalities.linear = 1;
solver(i).parametric = 1;
solver(i).constraint.binary = 1;
i = i+1;

solver(i) = emptysolver;
solver(i).tag     = 'MPLCP';
solver(i).version = '';
solver(i).checkfor= {'mplcp.m'};
solver(i).call    = 'callmplcp';
solver(i).objective.linear = 1;
solver(i).objective.quadratic.convex = 1;
solver(i).objective.quadratic.nonconvex = 1;
solver(i).constraint.inequalities.elementwise.linear = 1;
solver(i).constraint.equalities.linear = 1;
solver(i).parametric = 1;
solver(i).constraint.binary = 1;
i = i+1;

solver(i) = emptysolver;
solver(i).tag     = 'POP';
solver(i).version = '';
solver(i).checkfor= {'updatePOP'};
solver(i).call    = 'callPOP';
solver(i).objective.linear = 1;
solver(i).objective.quadratic.convex = 1;
solver(i).objective.quadratic.nonconvex = 1;
solver(i).constraint.inequalities.elementwise.linear = 1;
solver(i).constraint.equalities.linear = 1;
solver(i).parametric = 1;
solver(i).constraint.binary = 1;
i = i+1;

solver(i) = qpsolver;
solver(i).tag     = 'QUADPROGBB';
solver(i).version = '';
solver(i).checkfor= {'quadprogbb'};
solver(i).call    = 'callquadprogbb';
solver(i).objective.quadratic.nonconvex = 1;
solver(i).global = 1;
i = i+1;

solver(i) = emptysolver;
solver(i).tag     = 'fmincon';
solver(i).version = 'geometric';
solver(i).checkfor= {'fmincon.m'};
solver(i).call    = 'callfmincongp';
solver(i).objective.signomial = 1;
solver(i).objective.polynomial = 1;
solver(i).objective.quadratic.convex = 1;
solver(i).objective.quadratic.nonconvex = 1;
solver(i).constraint.inequalities.elementwise.signomial = 1;
solver(i).constraint.equalities.linear = 1;
solver(i).constraint.equalities.quadratic = 1;
solver(i).constraint.equalities.polynomial = 1;
solver(i).constraint.equalities.signomial = 1;
solver(i).constraint.equalities.multiterm  = 0;
solver(i).supportsinitial = 1;
solver(i).supportsinitialNAN = 1;
i = i+1;

solver(i) = emptysolver;
solver(i).tag     = 'fmincon';
solver(i).version = 'standard';
solver(i).checkfor= {'fmincon.m'};
solver(i).call    = 'callfmincon';
solver(i).objective.linear = 1;
solver(i).objective.quadratic.convex = 1;
solver(i).objective.quadratic.nonconvex = 1;
solver(i).objective.polynomial = 1;
solver(i).objective.signomial = 1;
solver(i).constraint.equalities.linear = 1;
solver(i).constraint.equalities.quadratic = 1;
solver(i).constraint.equalities.polynomial = 1;
solver(i).constraint.equalities.signomial = 1;
solver(i).constraint.inequalities.elementwise.linear = 1;
solver(i).constraint.inequalities.elementwise.quadratic.convex = 1;
solver(i).constraint.inequalities.elementwise.quadratic.nonconvex = 1;
solver(i).constraint.inequalities.elementwise.polynomial = 1;
solver(i).constraint.inequalities.elementwise.signomial = 1;
solver(i).constraint.inequalities.secondordercone.linear = 1;
solver(i).constraint.inequalities.semidefinite.linear = 1;
solver(i).constraint.inequalities.semidefinite.quadratic = 1;
solver(i).constraint.inequalities.semidefinite.polynomial = 1;
solver(i).constraint.inequalities.semidefinite.nonlinear = 1;
solver(i).dual = 1;
solver(i).evaluation = 1;
solver(i).supportsinitial = 1;
solver(i).supportsinitialNAN = 1;
solver(i).exponentialcone = 1;
solver(i).powercone = 1;
i = i+1;

solver(i) = sdpsolver;
solver(i).tag     = 'penlab';
solver(i).version = '';
solver(i).checkfor= {'penlab.m'};
solver(i).call    = 'callpenlabbmi';
solver(i).objective.quadratic.convex = 1;
solver(i).objective.quadratic.nonconvex = 1;
solver(i).constraint.equalities.linear = 0;
solver(i).constraint.inequalities.semidefinite.quadratic = 1;
solver(i).constraint.inequalities.semidefinite.polynomial = 1;
solver(i).constraint.inequalities.elementwise.quadratic.convex = 1;
solver(i).constraint.inequalities.elementwise.quadratic.nonconvex = 1;
solver(i).constraint.inequalities.elementwise.polynomial = 1;
solver(i).supportsinitial = 1;
solver(i).global = 0;
i = i+1;

solver(i) = emptysolver;
solver(i).tag     = 'pennon';
solver(i).version = 'standard';
solver(i).checkfor= {'pennonm'};
solver(i).call    = 'callpennonm';
solver(i).objective.linear = 1;
solver(i).objective.quadratic.convex = 1;
solver(i).objective.quadratic.nonconvex = 1;
solver(i).objective.polynomial = 1;
solver(i).objective.signomial = 1;
solver(i).constraint.equalities.linear = 1;
solver(i).constraint.equalities.quadratic = 1;
solver(i).constraint.equalities.polynomial = 1;
solver(i).constraint.equalities.signomial = 1;
solver(i).constraint.inequalities.elementwise.linear = 1;
solver(i).constraint.inequalities.elementwise.quadratic.convex = 1;
solver(i).constraint.inequalities.elementwise.quadratic.nonconvex = 1;
solver(i).constraint.inequalities.elementwise.polynomial = 1;
solver(i).constraint.inequalities.elementwise.signomial = 1;
solver(i).constraint.inequalities.semidefinite.linear = 1;
solver(i).constraint.inequalities.semidefinite.quadratic = 1;
solver(i).constraint.inequalities.semidefinite.nonlinear = 1;
solver(i).dual = 1;
solver(i).evaluation = 1;
solver(i).supportsinitial = 1;
solver(i).global = 0;
i = i+1;

solver(i) = emptysolver;
solver(i).tag     = 'SNOPT';
solver(i).version = 'geometric';
solver(i).checkfor= {'snsolve.m'};
solver(i).call    = 'callsnoptgp';
solver(i).objective.signomial = 1;
solver(i).objective.polynomial = 1;
solver(i).objective.quadratic.convex = 1;
solver(i).objective.quadratic.nonconvex = 1;
solver(i).constraint.inequalities.elementwise.signomial = 1;
solver(i).constraint.equalities.linear = 1;
solver(i).constraint.equalities.quadratic = 1;
solver(i).constraint.equalities.polynomial = 1;
solver(i).constraint.equalities.signomial = 1;
solver(i).constraint.equalities.multiterm  = 0;
solver(i).supportsinitial = 1;
i = i+1;

solver(i) = emptysolver;
solver(i).tag     = 'SNOPT';
solver(i).version = 'standard';
solver(i).checkfor= {'snsolve.m','snoptmex'};
solver(i).call    = 'callsnopt';
solver(i).objective.linear = 1;
solver(i).objective.quadratic.convex = 1;
solver(i).objective.quadratic.nonconvex = 1;
solver(i).objective.polynomial = 1;
solver(i).objective.signomial = 1;
solver(i).constraint.equalities.linear = 1;
solver(i).constraint.equalities.quadratic = 1;
solver(i).constraint.equalities.polynomial = 1;
solver(i).constraint.equalities.signomial = 1;
solver(i).constraint.inequalities.elementwise.linear = 1;
solver(i).constraint.inequalities.secondordercone.linear = 1;
solver(i).constraint.inequalities.secondordercone.nonlinear = 1;
solver(i).constraint.inequalities.elementwise.quadratic.convex = 1;
solver(i).constraint.inequalities.elementwise.quadratic.nonconvex = 1;
solver(i).constraint.inequalities.elementwise.polynomial = 1;
solver(i).constraint.inequalities.elementwise.signomial = 1;
solver(i).supportsinitial = 1;
solver(i).dual = 1;
solver(i).evaluation = 1;
i = i+1;

solver(i) = emptysolver;
solver(i).tag     = 'SNOPT';
solver(i).version = 'cmex';
solver(i).checkfor= {'snsolve.m','snoptcmex'};
solver(i).call    = 'callsnopt';
solver(i).objective.linear = 1;
solver(i).objective.quadratic.convex = 1;
solver(i).objective.quadratic.nonconvex = 1;
solver(i).objective.polynomial = 1;
solver(i).objective.signomial = 1;
solver(i).constraint.equalities.linear = 1;
solver(i).constraint.equalities.quadratic = 1;
solver(i).constraint.equalities.polynomial = 1;
solver(i).constraint.equalities.signomial = 1;
solver(i).constraint.inequalities.elementwise.linear = 1;
solver(i).constraint.inequalities.secondordercone.linear = 1;
solver(i).constraint.inequalities.secondordercone.nonlinear = 1;
solver(i).constraint.inequalities.elementwise.quadratic.convex = 1;
solver(i).constraint.inequalities.elementwise.quadratic.nonconvex = 1;
solver(i).constraint.inequalities.elementwise.polynomial = 1;
solver(i).constraint.inequalities.elementwise.signomial = 1;
solver(i).supportsinitial = 1;
solver(i).dual = 1;
solver(i).evaluation = 1;
i = i+1;

solver(i) = emptysolver;
solver(i).tag     = 'bonmin';
solver(i).version = '';
solver(i).checkfor= {'bonmin'};
solver(i).call    = 'callbonmin';
solver(i).objective.linear = 1;
solver(i).objective.quadratic.convex = 1;
solver(i).objective.quadratic.nonconvex = 1;
solver(i).objective.polynomial = 1;
solver(i).objective.signomial = 1;
solver(i).constraint.equalities.linear = 1;
solver(i).constraint.equalities.quadratic = 1;
solver(i).constraint.equalities.polynomial = 1;
solver(i).constraint.equalities.signomial = 1;
solver(i).constraint.inequalities.elementwise.linear = 1;
solver(i).constraint.inequalities.elementwise.quadratic.convex = 1;
solver(i).constraint.inequalities.elementwise.quadratic.nonconvex = 1;
solver(i).constraint.inequalities.elementwise.polynomial = 1;
solver(i).constraint.inequalities.elementwise.signomial = 1;
solver(i).constraint.integer = 1;
solver(i).constraint.binary = 1;
solver(i).dual = 0;
solver(i).evaluation = 1;
solver(i).supportsinitial = 1;
i = i+1;

solver(i) = emptysolver;
solver(i).tag     = 'FILTERSD';
solver(i).version = 'dense';
solver(i).checkfor= {'filtersd.m'};
solver(i).call    = 'callfiltersd';
solver(i).objective.linear = 1;
solver(i).objective.quadratic.convex = 1;
solver(i).objective.quadratic.nonconvex = 1;
solver(i).objective.polynomial = 1;
solver(i).objective.signomial = 1;
solver(i).constraint.equalities.linear = 1;
solver(i).constraint.equalities.quadratic = 1;
solver(i).constraint.equalities.polynomial = 1;
solver(i).constraint.equalities.signomial = 1;
solver(i).constraint.inequalities.elementwise.linear = 1;
solver(i).constraint.inequalities.elementwise.quadratic.convex = 1;
solver(i).constraint.inequalities.elementwise.quadratic.nonconvex = 1;
solver(i).constraint.inequalities.elementwise.polynomial = 1;
solver(i).constraint.inequalities.elementwise.signomial = 1;
solver(i).constraint.inequalities.semidefinite.linear = 1;
solver(i).constraint.inequalities.semidefinite.quadratic = 1;
solver(i).constraint.inequalities.semidefinite.polynomial = 1;
solver(i).constraint.inequalities.semidefinite.nonlinear = 1;
solver(i).dual = 1;
solver(i).evaluation = 1;
solver(i).supportsinitial = 1;
i = i+1;


solver(i) = emptysolver;
solver(i).tag     = 'FILTERSD';
solver(i).version = 'sparse';
solver(i).checkfor= {'filtersdsp.m'};
solver(i).call    = 'callfiltersdsp';
solver(i).objective.linear = 1;
solver(i).objective.quadratic.convex = 1;
solver(i).objective.quadratic.nonconvex = 1;
solver(i).objective.polynomial = 1;
solver(i).objective.signomial = 1;
solver(i).constraint.equalities.linear = 1;
solver(i).constraint.equalities.quadratic = 1;
solver(i).constraint.equalities.polynomial = 1;
solver(i).constraint.equalities.signomial = 1;
solver(i).constraint.inequalities.elementwise.linear = 1;
solver(i).constraint.inequalities.elementwise.quadratic.convex = 1;
solver(i).constraint.inequalities.elementwise.quadratic.nonconvex = 1;
solver(i).constraint.inequalities.elementwise.polynomial = 1;
solver(i).constraint.inequalities.elementwise.signomial = 1;
solver(i).dual = 1;
solver(i).evaluation = 1;
solver(i).supportsinitial = 1;
i = i+1;

solver(i) = emptysolver;
solver(i).tag     = 'nomad';
solver(i).version = '';
solver(i).checkfor= {'nomad'};
solver(i).call    = 'callnomad';
solver(i).objective.linear = 1;
solver(i).objective.quadratic.convex = 1;
solver(i).objective.quadratic.nonconvex = 1;
solver(i).objective.polynomial = 1;
solver(i).objective.signomial = 1;
solver(i).constraint.equalities.linear = 1;
solver(i).constraint.equalities.quadratic = 0;
solver(i).constraint.equalities.polynomial = 0;
solver(i).constraint.equalities.signomial = 0;
solver(i).constraint.inequalities.elementwise.linear = 1;
solver(i).constraint.inequalities.elementwise.quadratic.convex = 1;
solver(i).constraint.inequalities.elementwise.quadratic.nonconvex = 1;
solver(i).constraint.inequalities.elementwise.polynomial = 1;
solver(i).constraint.inequalities.elementwise.signomial = 1;
solver(i).constraint.integer = 1;
solver(i).constraint.binary = 1;
solver(i).dual = 0;
solver(i).evaluation = 1;
solver(i).supportsinitial = 1;
i = i+1;

solver(i) = emptysolver;
solver(i).tag     = 'ipopt';
solver(i).version = 'standard';
solver(i).checkfor= {'ipopt'};
solver(i).call    = 'callipopt';
solver(i).objective.linear = 1;
solver(i).objective.quadratic.convex = 1;
solver(i).objective.quadratic.nonconvex = 1;
solver(i).objective.polynomial = 1;
solver(i).objective.signomial = 1;
solver(i).constraint.equalities.linear = 1;
solver(i).constraint.equalities.quadratic = 1;
solver(i).constraint.equalities.polynomial = 1;
solver(i).constraint.equalities.signomial = 1;
solver(i).constraint.inequalities.elementwise.linear = 1;
solver(i).constraint.inequalities.elementwise.quadratic.convex = 1;
solver(i).constraint.inequalities.elementwise.quadratic.nonconvex = 1;
solver(i).constraint.inequalities.elementwise.polynomial = 1;
solver(i).constraint.inequalities.elementwise.signomial = 1;
solver(i).constraint.inequalities.secondordercone.linear = 1;
solver(i).constraint.inequalities.semidefinite.linear = 1;
solver(i).constraint.inequalities.semidefinite.quadratic = 1;
solver(i).constraint.inequalities.semidefinite.polynomial = 1;
solver(i).constraint.inequalities.semidefinite.nonlinear = 1;
solver(i).dual = 0;
solver(i).evaluation = 1;
solver(i).supportsinitial = 1;
solver(i).supportsinitialNAN = 1;
solver(i).exponentialcone = 1;
solver(i).powercone = 1;
i = i+1;


solver(i) = emptysolver;
solver(i).tag     = 'ipopt';
solver(i).version = 'geometric';
solver(i).checkfor= {'ipopt.m'};
solver(i).call    = 'callipoptgp';
solver(i).objective.signomial = 1;
solver(i).objective.polynomial = 1;
solver(i).objective.quadratic.convex = 1;
solver(i).objective.quadratic.nonconvex = 1;
solver(i).constraint.inequalities.elementwise.signomial = 1;
solver(i).constraint.equalities.linear = 1;
solver(i).constraint.equalities.quadratic = 1;
solver(i).constraint.equalities.polynomial = 1;
solver(i).constraint.equalities.signomial = 1;
solver(i).constraint.equalities.multiterm  = 0;
solver(i).supportsinitial = 1;
i = i+1;

solver(i) = lpsolver;
solver(i).tag     = 'GPPOSY';
solver(i).version = '';
solver(i).checkfor= {'gpposy'};
solver(i).call    = 'callgpposy';
solver(i).objective.signomial = 1;
solver(i).objective.quadratic.nonnegative = 1;
solver(i).constraint.inequalities.elementwise.signomial = 1;
solver(i).constraint.equalities.elementwise.nonlinear = 1;
solver(i).constraint.equalities.multiterm  = 0;
i = i+1;

solver(i) = emptysolver;
solver(i).tag     = 'fminsearch';
solver(i).version = '';
solver(i).checkfor= {'fminsearch.m','matlabrc'};
solver(i).call    = 'callfminsearch';
solver(i).objective.linear = 1;
solver(i).objective.quadratic.convex = 1;
solver(i).objective.quadratic.nonconvex = 1;
solver(i).objective.polynomial = 1;
solver(i).objective.signomial = 1;
solver(i).evaluation = 1;
solver(i).dual = 0;
solver(i).supportsinitial = 1;
i = i+1;

solver(i) = lpsolver;
solver(i).tag     = 'knitro';
solver(i).version = 'milp';
solver(i).checkfor= {'knitro_matlab'};
solver(i).call    = 'callknitro_milp';
solver(i).constraint.integer = 1;
solver(i).constraint.binary = 1;
solver(i).dual = 0;
solver(i).supportsinitial = 1;
i = i+1;

solver(i) = qpsolver;
solver(i).tag     = 'knitro';
solver(i).version = 'qp';
solver(i).checkfor= {'knitro_matlab'};
solver(i).call    = 'callknitro_qp';
solver(i).supportsinitial = 1;
solver(i).objective.quadratic.nonconvex = 1;
i = i+1;

solver(i) = emptysolver;
solver(i).tag     = 'knitro';
solver(i).version = 'standard';
solver(i).checkfor= {'knitro_matlab'};
solver(i).call    = 'callknitro';
solver(i).objective.linear = 1;
solver(i).objective.quadratic.convex = 1;
solver(i).objective.quadratic.nonconvex = 1;
solver(i).objective.polynomial = 1;
solver(i).objective.signomial = 1;
solver(i).constraint.equalities.linear = 1;
solver(i).constraint.equalities.quadratic = 1;
solver(i).constraint.equalities.polynomial = 1;
solver(i).constraint.equalities.signomial = 1;
solver(i).constraint.inequalities.elementwise.linear = 1;
solver(i).constraint.inequalities.elementwise.quadratic.convex = 1;
solver(i).constraint.inequalities.elementwise.quadratic.nonconvex = 1;
solver(i).constraint.inequalities.elementwise.polynomial = 1;
solver(i).constraint.inequalities.elementwise.signomial = 1;
solver(i).constraint.complementarity.variable = 1;
solver(i).constraint.inequalities.secondordercone.linear = 1;
solver(i).constraint.inequalities.semidefinite.linear = 1;
solver(i).constraint.inequalities.semidefinite.quadratic = 1;
solver(i).constraint.inequalities.semidefinite.polynomial = 1;
solver(i).constraint.inequalities.semidefinite.nonlinear = 1;
solver(i).constraint.integer = 1;
solver(i).constraint.binary = 1;
solver(i).dual = 0;
solver(i).evaluation = 1;
solver(i).supportsinitialNAN = 1;
solver(i).supportsinitial = 1;
solver(i).exponentialcone = 1;
solver(i).powercone = 1;
i = i+1;

solver(i) = emptysolver;
solver(i).tag     = 'knitro';
solver(i).version = 'legacy';
solver(i).checkfor= {'knitromatlab'};
solver(i).call    = 'callknitro';
solver(i).objective.linear = 1;
solver(i).objective.quadratic.convex = 1;
solver(i).objective.quadratic.nonconvex = 1;
solver(i).objective.polynomial = 1;
solver(i).objective.signomial = 1;
solver(i).constraint.equalities.linear = 1;
solver(i).constraint.equalities.quadratic = 1;
solver(i).constraint.equalities.polynomial = 1;
solver(i).constraint.equalities.signomial = 1;
solver(i).constraint.inequalities.elementwise.linear = 1;
solver(i).constraint.inequalities.elementwise.quadratic.convex = 1;
solver(i).constraint.inequalities.elementwise.quadratic.nonconvex = 1;
solver(i).constraint.inequalities.elementwise.polynomial = 1;
solver(i).constraint.inequalities.elementwise.signomial = 1;
solver(i).constraint.complementarity.variable = 1;
solver(i).constraint.inequalities.secondordercone.linear = 1;
solver(i).constraint.inequalities.semidefinite.linear = 1;
solver(i).constraint.inequalities.semidefinite.quadratic = 1;
solver(i).constraint.inequalities.semidefinite.polynomial = 1;
solver(i).constraint.inequalities.semidefinite.nonlinear = 1;
solver(i).constraint.integer = 1;
solver(i).constraint.binary = 1;
solver(i).dual = 0;
solver(i).evaluation = 1;
solver(i).supportsinitialNAN = 1;
solver(i).supportsinitial = 1;
solver(i).exponentialcone = 1;
solver(i).powercone = 1;
i = i+1;

solver(i) = emptysolver;
solver(i).tag     = 'baron';
solver(i).checkfor= {'baron.m'};
solver(i).call    = 'callbaron';
solver(i).objective.linear = 1;
solver(i).objective.quadratic.convex = 1;
solver(i).objective.quadratic.nonconvex = 1;
solver(i).objective.polynomial = 1;
solver(i).objective.signomial = 1;
solver(i).constraint.equalities.linear = 1;
solver(i).constraint.equalities.quadratic = 1;
solver(i).constraint.equalities.polynomial = 1;
solver(i).constraint.equalities.signomial = 1;
solver(i).constraint.inequalities.elementwise.linear = 1;
solver(i).constraint.inequalities.elementwise.quadratic.convex = 1;
solver(i).constraint.inequalities.elementwise.quadratic.nonconvex = 1;
solver(i).constraint.inequalities.elementwise.polynomial = 1;
solver(i).constraint.inequalities.elementwise.signomial = 1;
solver(i).constraint.integer = 1;
solver(i).constraint.binary = 1;
solver(i).dual = 0;
solver(i).evaluation = 1;
solver(i).supportsinitialNAN = 1;
solver(i).supportsinitial = 1;
solver(i).global = 1;
i = i+1;

solver(i) = emptysolver;
solver(i).tag     = 'scip';
solver(i).version = 'nl';
solver(i).checkfor= {'opti_scipnl.m'};
solver(i).call    = 'callscipnl';
solver(i).objective.linear = 1;
solver(i).objective.quadratic.convex = 1;
solver(i).objective.quadratic.nonconvex = 1;
solver(i).objective.polynomial = 1;
solver(i).objective.signomial = 1;
solver(i).constraint.equalities.linear = 1;
solver(i).constraint.equalities.quadratic = 1;
solver(i).constraint.equalities.polynomial = 1;
solver(i).constraint.equalities.signomial = 1;
solver(i).constraint.inequalities.elementwise.linear = 1;
solver(i).constraint.inequalities.elementwise.quadratic.convex = 1;
solver(i).constraint.inequalities.elementwise.quadratic.nonconvex = 1;
solver(i).constraint.inequalities.elementwise.polynomial = 1;
solver(i).constraint.inequalities.elementwise.signomial = 1;
solver(i).constraint.integer = 1;
solver(i).constraint.binary = 1;
solver(i).dual = 0;
solver(i).evaluation = 1;
solver(i).global = 1;
i = i+1;

solver(i) = sdpsolver;
solver(i).tag     = 'scs';
solver(i).version = 'direct';
solver(i).checkfor= {'scs_direct'};
solver(i).call    = 'callscs';
solver(i).constraint.equalities.linear = 1;
solver(i).constraint.inequalities.secondordercone.linear = 1;
solver(i).constraint.inequalities.rotatedsecondordercone.linear = 0;
solver(i).exponentialcone = 1;
i = i+1;

solver(i) = sdpsolver;
solver(i).tag     = 'scs';
solver(i).version = 'indirect';
solver(i).checkfor= {'scs_indirect'};
solver(i).call    = 'callscs';
solver(i).constraint.equalities.linear = 1;
solver(i).constraint.inequalities.secondordercone.linear = 1;
solver(i).constraint.inequalities.rotatedsecondordercone.linear = 0;
solver(i).exponentialcone = 1;
i = i+1;

solver(i) = lpsolver;
solver(i).tag     = 'INTLINPROG';
solver(i).version = '';
solver(i).checkfor= {'intlinprog.m'};
solver(i).call    = 'callintlinprog';
solver(i).constraint.binary = 1;
solver(i).constraint.integer = 1;
solver(i).dual = 0;
i = i+1;

% Gurobi nonlinear solver is placed down here to make sure it is not
% selected as a general nonlinear programming solver
solver(i) = qpsolver;
solver(i).tag     = 'GUROBI';
solver(i).version = 'NONLINEAR';
solver(i).checkfor= {'gurobi'};
solver(i).call    = 'callgurobi';
solver(i).objective.quadratic.nonconvex = 1;
solver(i).objective.polynomial = 1;
solver(i).constraint.inequalities.elementwise.quadratic.convex = 1;
solver(i).constraint.inequalities.elementwise.quadratic.nonconvex = 1;
solver(i).constraint.inequalities.elementwise.polynomial = 1;
solver(i).constraint.equalities.quadratic = 1;
solver(i).constraint.equalities.polynomial = 1;
solver(i).constraint.inequalities.secondordercone.linear = 1;
solver(i).constraint.integer = 1;
solver(i).constraint.binary = 1;
solver(i).constraint.semivar = 1;
solver(i).constraint.sos2 = 1;
solver(i).supportsinitial = 1;
solver(i).supportsinitialNAN = 1;
solver(i).evaluation = 1;
i = i+1;

% % ***************************************
% % SOMEWHAT MORE COMPLEX DEFINITIONS OF
% % THE INTERNAL MICP SOLVER
% % ***************************************
solver(i) = emptysolver;
solver(i).tag     = 'BNB';
solver(i).version = '';
solver(i).checkfor= {'bnb'};
solver(i).call    = 'bnb';
solver(i).objective.linear = 1;
solver(i).objective.signomial = 1;
solver(i).objective.polynomial = 1;
solver(i).objective.quadratic.convex = 1;
solver(i).objective.maxdet.convex = 1;
solver(i).constraint.equalities.linear = 1;
solver(i).constraint.inequalities.elementwise.linear = 1;
solver(i).constraint.inequalities.elementwise.signomial = 1;
solver(i).constraint.inequalities.elementwise.polynomial = 1;
solver(i).constraint.inequalities.semidefinite.linear = 1;
solver(i).constraint.inequalities.secondordercone.linear = 1;
solver(i).constraint.inequalities.rotatedsecondordercone.linear = 1;
solver(i).constraint.integer = 1;
solver(i).constraint.binary = 1;
solver(i).constraint.semivar = 1;
solver(i).constraint.semiintvar = 1;
solver(i).evaluation = 1;
solver(i).usesother = 1;
solver(i).builtin = 1;
solver(i).supportsinitial = 1;
i = i+1;

% % ***************************************
% % SOMEWHAT MORE COMPLEX DEFINITIONS OF
% % THE INTERNAL MICP SOLVER
% % ***************************************
solver(i) = emptysolver;
solver(i).tag     = 'CUTSDP';
solver(i).version = '';
solver(i).checkfor= {'cutsdp'};
solver(i).call    = 'cutsdp';
solver(i).objective.linear = 1;
solver(i).objective.signomial = 0;
solver(i).objective.polynomial = 0;
solver(i).objective.quadratic.convex = 1;
solver(i).constraint.equalities.linear = 1;
solver(i).constraint.inequalities.elementwise.linear = 1;
solver(i).constraint.inequalities.semidefinite.linear = 1;
solver(i).constraint.inequalities.secondordercone.linear = 1;
solver(i).constraint.integer = 1;
solver(i).constraint.binary = 1;
solver(i).dual = 1;
solver(i).complex = 0;
solver(i).usesother = 1;
solver(i).builtin = 1;
solver(i).global = 1;
i = i+1;

% % ***************************************
% % SOMEWHAT MORE COMPLEX DEFINITIONS OF
% % THE INTERNAL MICP SOLVER
% % ***************************************
solver(i) = emptysolver;
solver(i).tag     = 'CUTSDP';
solver(i).version = '';
solver(i).checkfor= {'cutsdp'};
solver(i).call    = 'cutsdp';
solver(i).objective.linear = 1;
solver(i).objective.signomial = 0;
solver(i).objective.polynomial = 0;
solver(i).objective.quadratic.convex = 1;
solver(i).constraint.equalities.linear = 1;
solver(i).constraint.inequalities.elementwise.linear = 1;
solver(i).constraint.inequalities.semidefinite.linear = 1;
solver(i).constraint.inequalities.secondordercone.linear = 1;
solver(i).constraint.integer = 1;
solver(i).constraint.binary = 1;
solver(i).dual = 1;
solver(i).complex = 0;
solver(i).usesother = 1;
solver(i).global = 1;
i = i+1;

% ***************************************
% SOMEWHAT MORE COMPLEX DEFINITIONS OF
% THE INTERNAL GLOBAL BMI SOLVER
% ***************************************
solver(i) = emptysolver;
solver(i).tag     = 'BMIBNB';
solver(i).version = '';
solver(i).checkfor= {'bmibnb'};
solver(i).call    = 'bmibnb';
solver(i).objective.linear = 1;
solver(i).objective.quadratic.convex = 1;
solver(i).objective.quadratic.nonconvex = 1;
solver(i).objective.polynomial = 1;
solver(i).objective.signomial = 1;
solver(i).constraint.equalities.linear = 1;
solver(i).constraint.equalities.polynomial = 1;
solver(i).constraint.inequalities.elementwise.linear = 1;
solver(i).constraint.inequalities.elementwise.quadratic.convex = 1;
solver(i).constraint.inequalities.elementwise.quadratic.nonconvex = 1;
solver(i).constraint.inequalities.elementwise.polynomial = 1;
solver(i).constraint.inequalities.elementwise.signomial = 1;
solver(i).constraint.inequalities.semidefinite.linear = 1;
solver(i).constraint.inequalities.semidefinite.quadratic = 1;
solver(i).constraint.inequalities.semidefinite.polynomial = 1;
solver(i).constraint.inequalities.secondordercone.linear = 1;
solver(i).constraint.inequalities.rotatedsecondordercone.linear = 1;
solver(i).constraint.binary  = 1;
solver(i).constraint.integer = 1;
solver(i).constraint.semivar = 0;
solver(i).evaluation = 1;
solver(i).usesother = 1;
solver(i).builtin = 1;
solver(i).supportsinitial = 1;
solver(i).supportsinitialNAN = 1;
solver(i).global = 1;
i = i+1;

% ***************************************
% SOMEWHAT MORE COMPLEX DEFINITIONS OF
% THE INTERNAL BISECTION SOLVER
% ***************************************
solver(i) = emptysolver;
solver(i).tag     = 'BISECTION';
solver(i).version = '';
solver(i).checkfor= {'bisection'};
solver(i).call    = 'bisection';
solver(i).objective.linear = 1;
solver(i).constraint.equalities.linear = 1;
solver(i).constraint.inequalities.elementwise.linear = 1;
solver(i).constraint.inequalities.elementwise.quadratic.convex = 1;
solver(i).constraint.inequalities.semidefinite.linear = 1;
solver(i).constraint.inequalities.semidefinite.quadratic = 1;
solver(i).constraint.inequalities.secondordercone.linear = 1;
solver(i).constraint.inequalities.rotatedsecondordercone.linear = 1;
solver(i).usesother = 1;
solver(i).builtin = 1;
solver(i).global = 1;
i = i+1;

solver(i) = qpsolver;
solver(i).tag     = 'kktqp';
solver(i).version = '';
solver(i).checkfor= {'kktqp'};
solver(i).call    = 'kktqp';
solver(i).objective.linear = 1;
solver(i).objective.quadratic.convex = 1;
solver(i).objective.quadratic.nonconvex = 1;
solver(i).constraint.equalities.linear = 0;
solver(i).constraint.inequalities.elementwise.linear = 1;
solver(i).usesother = 1;
solver(i).builtin = 1;
solver(i).global = 1;
i = i+1;

solver(i) = emptysolver;
solver(i).tag     = 'sparsepop';
solver(i).version = '';
solver(i).checkfor= {'sparsePOP.m'};
solver(i).call    = 'callsparsepop';
solver(i).objective.linear = 1;
solver(i).objective.quadratic.convex = 1;
solver(i).objective.quadratic.nonconvex = 1;
solver(i).objective.polynomial = 1;
solver(i).constraint.equalities.linear = 1;
solver(i).constraint.equalities.quadratic = 1;
solver(i).constraint.equalities.polynomial = 1;
solver(i).constraint.inequalities.elementwise.linear = 1;
solver(i).constraint.inequalities.elementwise.quadratic.convex = 1;
solver(i).constraint.inequalities.elementwise.quadratic.nonconvex = 1;
solver(i).constraint.inequalities.elementwise.polynomial = 1;
solver(i).usesother = 1;
i = i+1;


solver(i) = emptysolver;
solver(i).tag     = 'none';
solver(i).version = '';
solver(i).checkfor= {'callnone.m'};
solver(i).call    = 'callnone';
solver(i).objective.linear = 1;
solver(i).objective.quadratic.convex = 1;
solver(i).objective.quadratic.nonconvex = 1;
solver(i).objective.polynomial = 1;
solver(i).objective.signomial = 1;
solver(i).constraint.equalities.linear = 1;
solver(i).constraint.equalities.quadratic = 1;
solver(i).constraint.equalities.polynomial = 1;
solver(i).constraint.equalities.signomial = 1;
solver(i).constraint.inequalities.elementwise.linear = 1;
solver(i).constraint.inequalities.elementwise.quadratic.convex = 1;
solver(i).constraint.inequalities.elementwise.quadratic.nonconvex = 1;
solver(i).constraint.inequalities.elementwise.polynomial = 1;
solver(i).constraint.inequalities.elementwise.signomial = 1;
solver(i).constraint.inequalities.semidefinite.linear = 1;
solver(i).constraint.inequalities.semidefinite.quadratic = 1;
solver(i).constraint.inequalities.semidefinite.polynomial = 1;
solver(i).evaluation = 1;
solver(i).supportsinitial = 1;
solver(i).show = 0;
i = i+1;

solver(i) = lpsolver;
solver(i).tag     = 'LSQNONNEG';
solver(i).version = '';
solver(i).checkfor= {'lsqnonneg.m'};
solver(i).call    = 'calllsqnonneg';
solver(i).constraint.inequalities.secondordercone.linear = 1;
solver(i).constraint.equalities.linear = 0;
solver(i).constraint.inequalities.linear = 0;
i = i+1;

solver(i) = lpsolver;
solver(i).tag     = 'LSQLIN';
solver(i).version = '';
solver(i).checkfor= {'lsqlin.m'};
solver(i).call    = 'calllsqlin';
solver(i).constraint.inequalities.secondordercone.linear = 1;
i = i+1;

solver(i) = sdpsolver;
solver(i).tag     = 'frlib';
solver(i).version = '';
solver(i).checkfor= {'frlibPrg.m'};
solver(i).call    = 'callfrlib';
solver(i).constraint.equalities.linear = 1;
solver(i).constraint.inequalities.secondordercone.linear = 1;
solver(i).constraint.inequalities.rotatedsecondordercone.linear = 0;
i = i+1;

solver(i) = lpsolver;
solver(i).tag     = 'REFINER';
solver(i).subversion = '1.1';
solver(i).checkfor= {'iterative_refinement'};
solver(i).call    = 'iterative_refinement';
solver(i).supportshighprec = 1;
i = i+1;
